#include <bits/stdc++.h>

#define in read()
#define fi first
#define se second
#define pb push_back
#define rep(i, x, y) for(int i = (x); i <= (y); i++)
#define per(i, x, y) for(int i = (x); i >= (y); i--)

using namespace std;

using pii = pair < int , int >;
using vec = vector < int >;
using veg = vector < pii >;
using ll = long long;
using db = double;
using tl = tuple < int, int, int >;

int read() {
    int x = 0; bool f = 0; char ch = getchar(); while(!isdigit(ch)) f |= ch == '-',ch = getchar();
    while(isdigit(ch)) x = x * 10 + (ch ^ 48),ch = getchar(); return f ? -x : x;
}

const int N = 1e5 + 10;
const int B = 220;

int ans[N], ind[N], fa[N], n, tim, f[N];
vec G[N];

void dfs(int x, int p) {
	fa[x] = p; 
	for(auto y : G[x]) if(y ^ p) dfs(y, x);
	ind[++tim] = x;
}

int calc(int lim) {
	if(~ans[lim]) return ans[lim];
	rep(i, 1, n) f[i] = 1;
	int ans = 0;
	rep(i, 1, n) {
		int x = ind[i];
		if(fa[x] && (~f[fa[x]]) && (~f[x])) {
			if(f[fa[x]] + f[x] >= lim) ans++, f[fa[x]] = f[x] = -1;
			else f[fa[x]] = max(f[fa[x]], f[x] + 1);
		} 
	} return ans;
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
#endif
	n = in; rep(i, 1, n - 1) { int u = in, v = in; G[u].pb(v); G[v].pb(u); }
	dfs(1, 0); memset(ans, -1, sizeof ans); ans[1] = n;
	rep(i, 2, B) ans[i] = calc(i);
	rep(i, B + 1, n) {
		int j = i, l = i, r = n, t = calc(i);
		while(l <= r) {
			int mid = l + r >> 1;
			if(calc(mid) == t) l = mid + 1, j = mid;
			else r = mid - 1;
		}
		rep(k, i, j) ans[k] = t; i = j;
	} rep(i, 1, n) printf("%d\n", ans[i]); return 0;
}
